import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
import javax.swing.filechooser.*;

final class ColorUtility {
   public static Color[] generateGradient(Color c1, Color c2, int step) {
      float[] c1Cpn=new float[3];
      float[] c2Cpn=new float[3];
      c1.getRGBColorComponents(c1Cpn);
      c2.getRGBColorComponents(c2Cpn);
      float ri=(c2Cpn[0]-c1Cpn[0])/step;
      float gi=(c2Cpn[1]-c1Cpn[1])/step;
      float bi=(c2Cpn[2]-c1Cpn[2])/step;
      float r=c1Cpn[0];
      float g=c1Cpn[1];
      float b=c1Cpn[2];
      Color[] res=new Color[step];
      for(int i=0; i<step; i++, r+=ri, g+=gi, b+=bi) {
         res[i]=new Color(r, g, b);
      }
      return res;
   }
   public static Color[] generateGradient(Color[] colors, int step) {
      final Color[] res=new Color[step*(colors.length-1)];
      int index=0;
      for(int i=0; i<colors.length-1; i++) {
         Color c1=colors[i];
         Color c2=colors[i+1];
         float[] c1Cpn=new float[3];
         float[] c2Cpn=new float[3];
         c1.getRGBColorComponents(c1Cpn);
         c2.getRGBColorComponents(c2Cpn);
         float ri=(c2Cpn[0]-c1Cpn[0])/step;
         float gi=(c2Cpn[1]-c1Cpn[1])/step;
         float bi=(c2Cpn[2]-c1Cpn[2])/step;
         float r=c1Cpn[0];
         float g=c1Cpn[1];
         float b=c1Cpn[2];
         for(int j=0; j<step; j++, r+=ri, g+=gi, b+=bi) {
            res[index++]=new Color(r, g, b);
         }
      }
      return res;
   }
}
